// Promise.resolve()
//   .then(() => {
//     console.log(0);
//     return 4;
//   })
//   .then((e) => {
//     console.log(e);
//   });
// Promise.resolve()
//   .then(() => {
//     console.log(1);
//   })
//   .then(() => {
//     console.log(2);
//   })
//   .then(() => {
//     console.log(3);
//   })
//   .then(() => {
//     console.log(5);
//   })
//   .then(() => {
//     console.log(6);
//   });

function curryingAdd() {
  // 参数数组化 arguments是伪数组
  let args = Array.from(arguments);
  function inner() {
    // 参数数组化
    let args2 = Array.from(arguments);
    // 如果这个内部参数长度为0 说明 是() 就进行累加操作并返回值
    if (args2.length == 0) {
      return args.reduce((prev, curr) => {
        return prev + curr;
      });
    }
    // 有参数 则将参数推入args 再返回这个函数供后面调用
    else {
      // 将数组值展开 推入args数组
      args.push(...args2);
      return inner;
    }
  }
  inner.toString = function () {
    return args.reduce((prev, curr) => {
      return prev + curr;
    });
  };
  // 每次都返回一个函数
  return inner;
}
console.log(curryingAdd(2)(3)(4)()); // 9
console.log(curryingAdd(2, 3)(4)()); // 9
console.log(curryingAdd(2)(3, 4)); // 9
